﻿using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
using Volo.Abp.Modularity;
using Volo.Abp.Testing;

namespace Acme.TestBase;

public abstract class AcmeTestBase<TStartupModule> : AbpIntegratedTest<TStartupModule> 
    where TStartupModule : IAbpModule
{
    protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
    {
        options.UseAutofac();
    }

    // protected virtual Task WithUnitOfWorkAsync(Func<Task> func)
    // {
    //     return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func);
    // }
    //
    // protected virtual async Task WithUnitOfWorkAsync(AbpUnitOfWorkOptions options, Func<Task> action)
    // {
    //     using (var scope = ServiceProvider.CreateScope())
    //     {
    //         var uowManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
    //
    //         using (var uow = uowManager.Begin(options))
    //         {
    //             await action();
    //
    //             await uow.CompleteAsync();
    //         }
    //     }
    // }
    //
    // protected virtual Task<TResult> WithUnitOfWorkAsync<TResult>(Func<Task<TResult>> func)
    // {
    //     return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func);
    // }
    //
    // protected virtual async Task<TResult> WithUnitOfWorkAsync<TResult>(AbpUnitOfWorkOptions options, Func<Task<TResult>> func)
    // {
    //     using (var scope = ServiceProvider.CreateScope())
    //     {
    //         var uowManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
    //
    //         using (var uow = uowManager.Begin(options))
    //         {
    //             var result = await func();
    //             await uow.CompleteAsync();
    //             return result;
    //         }
    //     }
    // }
}